package cn.cj.erp.common.utils;

import cn.hutool.core.util.StrUtil;

public class MaskUtil {
     /**
     * 前三后四 隐藏手机号
     * @param phone 手机号
     * @return java.lang.String
     */
    public static String maskPhone(String phone) {
        if (StrUtil.isBlank(phone)) {
            return phone;
        }
        if (phone.length() <= 7) {
            return phone;
        }

        // 前3后四
        return String.format("%s****%s", phone.substring(0, 3), phone.substring(phone.length() - 4));
    }

    /**
     * 隐藏身份证号
     * @param certNo 身份证号
     * @return String
     */
    public static String maskCertNo(String certNo){
        if (StrUtil.isEmpty(certNo)) {
            return "";
        }
        return certNo.replaceAll("(\\d{10})\\d{4}(\\w{4})","$1****$2");
    }

    /**
     * 前六后四 隐藏银行卡号
     * @param cardNo 卡号
     * @return java.lang.String
     */
    public static String maskBankCard(String cardNo) {
        if (StrUtil.isBlank(cardNo)) {
            return cardNo;
        }
        if (cardNo.length() <= 10) {
            return cardNo;
        }
        //前六后四
        return String.format("%s****%s", cardNo.substring(0, 6), cardNo.substring(cardNo.length() - 6));
    }

    /**
     *
    * 隐藏姓名
    * @param name 姓名
    * @return String
     */
    public static String maskName(String name){
        if(StrUtil.isEmpty(name)){
            return "";
        }
        return name.replaceAll("([\\u0000-\\uFFFF]{1})(.*)", "$1" + createAsterisk(name.length() - 1));
    }

    /** 
     * 隐藏姓氏
     * @param name 姓名
     * @return java.lang.String
     */
    public static String maskFirstName(String name) {
        if (StrUtil.isBlank(name)){
            return "";
        }
        if (name.length() == 1) {
            return name;
        }
        String rightName = name.substring(1);
        return StrUtil.padPre(rightName, 1, "*");
    }

    /**
     * 隐藏IP地址
     * @param ip ip地址
     * @return java.lang.String
     */
    public static String maskIp(String ip) {
        if (StrUtil.isBlank(ip)) {
            return ip;
        }
        if (ip.length() <= 4) {
            return ip;
        }
        //前2后2
        return String.format("%s******%s", ip.substring(0, 2), ip.substring(ip.length() - 2));
    }

    /** 
     * 隐藏券码
     * @param couponCode 券码
     * @return java.lang.String
     */
    public static String maskCouponCode(String couponCode) {
        if (StrUtil.isBlank(couponCode)) {
            return couponCode;
        }
        if (couponCode.length() <= 4) {
            return couponCode;
        }
        //前2后2
        return String.format("%s******%s", couponCode.substring(0, 2), couponCode.substring(couponCode.length() - 2));
    }



    /**
     * 前三后四 隐藏邮箱
     * @param email 邮箱
     * @return String
     */
    public static String maskEmail(String email) {
        if (StrUtil.isBlank(email)) {
            return email;
        }
        if (email.length() <= 7) {
            return email;
        }
        // 前3后四
        return String.format("%s****%s", email.substring(0, 3), email.substring(email.length() - 4));
    }

    /**
     * 生成很多个*号
     * @param len 个数
     * @return java.lang.String
     */
    private static String createAsterisk(int len) {
        StringBuilder mask = new StringBuilder();
        for (int i = 0; i < len; i++) {
            mask.append("*");
        }
        return mask.toString();
    }
}
